/* =============================================
Comment: 문자열 왼쪽의 공백을 없애주는 함수
Return :
Usage  :
============================================= */
function ltrim(ohs) {
	var str;
	str=ohs;
	if(str.charAt(0)==" ") {
		str=str.substring(1);
		return ltrim(str);
	} else {
		return str;
	}
}

/* =============================================
Comment: 문자열 오른쪽의 공백을 없애주는 함수
Return :
Usage  :
============================================= */
function rtrim (str) {
	if (isEmpty(str)) {
		return "";
	}

	var pos = str.length - 1;

	while (str.charAt(pos) == " ") {
		pos--;
	}

	return str.substring(0, pos + 1);
}

/* =============================================
Comment: 문자열 양끝의 공백을 없애주는 함수
Return :
Usage  :
============================================= */
function trim (str) {
	return rtrim(ltrim(str));
}

/* =============================================
Comment: 문자열이 비어 있으면 true를 리턴
Return :
Usage  :
============================================= */
function isEmpty(ohs) {
	if (ohs==null || ltrim(ohs)=="") {
		return true;
	} else {
		return false;
	}
}

/* =============================================
Comment: 문자열이 숫자이면 true를 리턴
Return :
Usage  :
============================================= */
function isNum(ohs) {
	if(isEmpty(ohs)) {
		return false;
	}
	if ((ohs.charAt(0)!='-') && (ohs.charAt(0)<'0'||ohs.charAt(0)>'9')) { //음수일경우
		return false;
	}
	for (var i=1; i<ohs.length; i++) {
		if (ohs.charAt(i)<'0' || ohs.charAt(i)>'9') {
			return false;
		}
	}

	return true;
}


/* =============================================
Comment: 문자열이 숫자이면 true를 리턴  , 음수 허용 안함.
Return :
Usage  :
============================================= */
function isNumber(ohs) {
	if(isEmpty(ohs)) {
		return false;
	}


	for (var i=0; i<ohs.length; i++) {
		if (ohs.charAt(i)<'0' || ohs.charAt(i)>'9') {
			return false;
		}
	}

	return true;
}


/* =============================================
Comment: Key Event에서 숫자만 입력받게 함
Return :
Usage  :
============================================= */
function onlyNum() {
	if ((event.keyCode<48) || (event.keyCode>57))
		if ((event.keyCode != 46))
		{
			event.returnValue=false;
		}
	return true;
}

/* =============================================
Comment: 새창을 연다
Return :
Usage  :
============================================= */
function openWindow(url, winName, winWidth, winHeight, winOptions) {
	var posX=0;
	var posY=0;
	var nWidth=Number(winWidth);
	var nHeight=Number(winHeight);

	if (screen.width>nWidth) {
		posX=(screen.width-nWidth)/2;
	} else {
		nWidth=screen.width;
	}

	if (screen.height>nHeight) {
		posY=(screen.height-nHeight)/2;
	} else {
		nHeight=screen.height;
	}

	winProps="width="+nWidth+", height="+nHeight+", top="+posY+", left="+posX+", "+winOptions;

	window.open(url,winName,winProps);
}

/* =============================================
 * 숫자를 주어진 길이의 문자열로 바꾼다.
 * 앞빈칸은 fillChar으로 채운다.
 * 숫자값이 주어진 자릿수보다 크만 뒤의숫자는 짤린다.
 * @param nDigit
 * @param nLen
 * @param fillChar
 * @return
 * ex) digitToString(123, 7, '*') ==> ****123
============================================= */
function digitToString(nDigit, nLen, fillChar) {
	var str = "";
	var n = Math.pow(10, nLen);
	var nDigitLen = nDigit.toString().length;

	if (nDigit >= n) {
		str = nDigit.toString().substring(0, nLen);
	} else {
		//n += nDigit;
		//str = n.toString().substring(1);
		for(i=0; i < (nLen - nDigitLen); i++) {
			str = str.concat(fillChar);
		}
		str = str.concat(nDigit.toString());
	}

	return str;
}

/* =============================================
Comment: 숫자에 콤마를 추가한다.
Return :
Usage  : <input type="text" name="won" onkeypress="onlyNum();" style="ime-mode:disabled;"
				onKeyUp="this.value=toCurrencyFormat(this.value)">
============================================= */
function toCurrencyFormat(s) {
	if(ltrim(s) == "0") {
		return ltrim(s);
	}

	var str  = s.replace(/\D/g,"");
	var len  = str.length;
	var tmp  = "";
	var tm2  = "";
	var i    = 0;

	while (str.charAt(i) == '0') i++;
	str = str.substring(i,len);
	len = str.length;
	if(len < 3) {
		return str;
	} else {
		var sit = len % 3;
		if (sit > 0) {
			tmp = tmp + str.substring(0,sit) + ',';
			len = len - sit;
		}
		while (len > 3) {
			tmp = tmp + str.substring(sit,sit+3) + ',';
			len = len - 3;
			sit = sit + 3;
		}
		tmp = tmp + str.substring(sit,sit+3) + tm2;
		str = tmp;
	}
	return str;
}

/* =============================================
Comment: 변수의 콤마를 제거한다.
Return :
Usage  :
============================================= */
function removeComma(val) {
	str = "";
	strr = val.split(",");
	for (r=0;r<strr.length;r++){
		str += strr[r];
	}
	return str;
}

/* =============================================
Comment: 문자열 str1중에서 str2를 str3로 변환.
Return :
Usage  :
============================================= */
function replace(str1, str2, str3) {
	var temp;
	var nPos = -1;
	temp = "" + str1;
	while ((nPos = temp.indexOf(str2)) > -1) {
		temp = "" + (temp.substring(0, nPos) + str3 + temp.substring((nPos + str2.length), temp.length));
	}

	return temp;
}

/* =============================================
Comment: str1의 문자열을 str2의 태그로 둘러쌓인 문자열로 반환한다.
Return :
Usage  :
============================================= */
function setTagValue(str1, str2) {
	var rValue = "";

	if(str1 != null && !isEmpty(str2)) {
		rValue = "<" + str2 + ">" + str1 + "</" + str2 + ">";
	}

	return rValue;
}

/* =============================================
Comment: str1의 문장중 str2의 태그로 둘러쌓인 문자열을 반환한다
Return :
Usage  :
============================================= */
function getTagValue(str1, str2) {
	var rValue = "";
	var n1=str1.indexOf("<"+str2+">");
	var n2=str1.indexOf("</"+str2+">");

	if (n1 >= 0 && n2 >= 0) {
		rValue = str1.substring(n1 + 2 + str2.length, n2);
	}

	return rValue
}


/* =============================================
Comment: str1의 문장중 str2의 태그로 둘러쌓인
		문자열들을 배열로 반환한다
Return :
Usage  :
============================================= */
function getTagValues(str1, str2) {
	var arrEvent = new Array();
	var nFrom = 0;
	var nCnt = 0;

	while (true) {
		var n1=str1.indexOf("<"+str2+">",nFrom);
		var n2=str1.indexOf("</"+str2+">",nFrom);
		if (n1 >= 0 && n2 >= 0) {
			arrEvent[nCnt] = str1.substring(n1 + 2 + str2.length, n2);
		} else {
			break;
		}

		nFrom = n2 + 3 + str2.length;
		nCnt++;
	}

	return arrEvent;
}


/* =============================================
Comment: cursor 모양을 컨트롤한다.
Return :
Usage  :
============================================= */
function setBodyCursor(cursorType) {
	document.body.style.cursor = cursorType;
}

function setCursor(objectName, cursorType) {
	document.all(objectName).style.cursor = cursorType;
}


/* =============================================
Comment: 윈도의 크기를 변화시킨다.
		입력 사이즈가 음수이면 현재 윈도사이즈,
		true 이면 창을 가운데로 위치시킨다.
Return :
Usage  : resizeWindow(-1, 500, true);
============================================= */
function resizeWindow(nWidth, nHeight, isCenter) {
	if (nWidth > 0) {
		if (nWidth > screen.width) {
			nWidth = screen.width;
		}
	} else {
		nWidth = document.body.clientWidth;
	}

	//alert(nHeight + ":" + screen.height);

	if (nHeight > 0) {
		if (nHeight > screen.height) {
			nHeight = screen.height - 150;
		}
	} else {
		nHeight = document.body.clientHeight;
	}

	//alert(nHeight);

	var posX=0;
	var posY=0;
	if (isCenter) {
		posX = (screen.width - nWidth) / 2;
		posY = (screen.height - nHeight) / 2;

		window.moveTo(posX, posY);
	}

	window.resizeBy(nWidth - document.body.clientWidth, nHeight - document.body.clientHeight);

	if (isCenter) { //창크기때문에 이동이 덜 되었을때 대비 재이동
		window.moveTo(posX, posY);
	}
}


/* =============================================
Comment: 객체의 속성리스트를 보여준다(개발시 사용).
Return :
Usage  : getObjectAttributes(document.body);
============================================= */
function getObjectAttributes(obj) {
	attWin = window.open("" , "attWin", "width=800, height=700,resizable=yes,scrollbars=yes");
	attWin.document.write("속성:" + obj + "<br><br>");

	for (p in obj) {
		attWin.document.write(p + ": ") + attWin.document.write(obj[p] + "<br>");
	}
}


/* =============================================
Comment: 날짜 형식을 변환한다(2004-11-11 --> 20041111)
Return :
Usage  :
============================================= */
function convertDateFormat(formName, element1, element2) {
	var theForm = document.all(formName);
	theForm.all(element1).value = ltrim(replace(theForm.all(element2).value, "-", ""));
}


/* =============================================
Comment: 문자열중 숫자만 남기고 모두 제거한다(2005-05-19 --> 20050519)
Return :
Usage  :
============================================= */
function getNumberOnly(str) {
	var numStr = "";

	var ch;
	for (var i = 0; i < str.length; i++) {
		ch = str.charAt(i);
		if (ch >= '0' && ch <='9') {
			numStr = numStr.concat(ch);
		}
	}

	return numStr;
}


/* =============================================
Comment: 문자열의 바이트 길이를 리턴한다.(한글=2byte,영숫자=1byte)
Return :
Usage  :
============================================= */
function getByteLength(p1) {
	var len = 0;
	var str = p1.substring(0);

	if(str == null) return 0;

	for(var i = 0; i < str.length; i++) {
		var ch = escape(str.charAt(i));

		if(ch.length == 1) len++;
		else if(ch.indexOf("%u") != -1) len += 3;  // 한글 등 2bytes문자 - 기본은 2bytes이나 오라클이 UTF-8로 인코딩할 경우엔 3bytes로 처리하므로 +3
		else if(ch.indexOf("%") != -1) len += ch.length / 3; // 특수문자 등
	}

	return len;
}


/* =============================================
Comment: inputObj의 날짜값을 targetObj에 8자리 숫자로 표시한다.
Return :
Usage  :
============================================= */
function setDate(inputObj, targetObj) {
	var dateStr = getNumberOnly(inputObj.value);

	if (!isValidDate(dateStr)) {
		openWarningMessageWindow('입력 값이 날짜 형식에 맞지 않습니다<br>가능예)<br>2009-05-19, 2009/05/19, 20090519 등..');
		targetObj.value = "";
		inputObj.value = "";
		inputObj.select();
		return;
	}

	targetObj.value = dateStr;
	inputObj.value = dateStr.substr(0, 4) + "-" + dateStr.substr(4, 2) + "-" + dateStr.substr(6, 2);
}


/* =============================================
Comment: 날짜형식이 맞는지 체크한다.
Return :
Usage  :
============================================= */
function isValidDate(yyyymmdd) {
	yyyymmdd = getNumberOnly(yyyymmdd);
	if (yyyymmdd.length != 8) {
		return false;
	}

	var mm = parseInt(yyyymmdd.substr(4, 2), 10);
	if (mm < 1 || mm > 12) {
		return false;
	}

	var yyyy = yyyymmdd.substr(0, 4);
	mm = mm -1;
	var dd = parseInt(yyyymmdd.substr(6, 2), 10);
	var end = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	if ((yyyy % 4 == 0 && yyyy % 100 != 0) || yyyy % 400 == 0) {
		end[1] = 29;
	}
	return (dd >= 1 && dd <= end[mm]);
}

/**
 * 콤마로 구분된 수를 확인해서 cCount 수를 초과하면 경고창 표시
 * @param field
 * @param cCount
 * @param name 경고메시지용 필드명
 * @param blankCheck true면 공백체크, false면 공백허용
 * @return
 */
function checkComma(field, cCount, name, blankCheck) {
	var value = field.value;

	var values = value.split(",");
	var hasValue = false;

	for(var i = 0; i < values.length; i++) {
		if(values[i] == "" && hasValue == false) { // 하나라도 값이 있으면 패스
			openWarningMessageWindow(name + ' 항목에 값을 입력해주세요.');
			field.focus();
			return false;
		}
		else {
			hasValue = true;
		}


		if(blankCheck != 'undefined' && blankCheck) {
			if (values[i].indexOf(' ') >= 0) {
				openWarningMessageWindow(name + ' 항목에 공백을 포함할 수 없습니다.');
				field.focus();
				return false;
			}
		}
	}

	if(values.length > cCount) {
		alert(name + " 항목은 컴마(,)를 구분으로 " + cCount + "단어까지 입력하실 수 있습니다.");
		field.focus();
		return false;
	}

	return true;
}

/**
 * obj가 list 안에 몇 개나 있는가를 체크
 * @param obj
 * @param list
 * @return
 */
function countObjInList(obj, list) {
	var count = 0;

	for(var i = 0; i < list.length; i++) {
		if(obj == list[i]) {
			count++;
		}
	}

	//alert(count);
	return count;
}

function setSelectedOption(selectObj, selectedValue) {
	var options = selectObj.options;
	var selectedIndex = 0;

	for(var i = 0; i < options.length; i++) {
		if(options[i].value == selectedValue) {
			selectedIndex = i;
			break;
		}
	}

	selectObj.selectedIndex = selectedIndex;
}

/**
 * BP여부 체크
 * @param isPartner
 * @param msg BP아닐 시 표시할 경고 메시지
 * @return
 */
function checkPartnerYn(isPartner, msg) {
	if(!isPartner) {
		alert(msg);
		return false;
	}

	return true;
}

/**
 * 미리보기 파일 모두 다 입력했는지 체크
 */
function checkPreviewFiles(preFieldName, scPreFieldName) {
	var preObj = document.getElementById(preFieldName);
	var scPreObj = document.getElementById(scPreFieldName);
	//alert(preObj.value);

//	var preValue = preObj.value;
//	var scPreValue = scPreObj.value;
//
//	if(preValue != "" || scPreValue != "") { // 미리보기 둘 중 하나라도 입력받으면
//
//		if(preValue == "" || scPreValue == "") { // 둘 중 하나라도 없으면 에러
//			return false;
//		}
//	}
//
//	return true;

	var result = checkPreviewFilesByObj(preObj, scPreObj);
	return result;
}

function checkPreviewFilesByObj(preObj, scPreObj) {

	var preValue = preObj.value;
	var scPreValue = scPreObj.value;
//	alert("preValue = " + preValue + " : scPreValue = " + scPreValue);

	if(preValue != "" || scPreValue != "") { // 미리보기 둘 중 하나라도 입력받으면

		if(preValue == "" || scPreValue == "") { // 둘 중 하나라도 없으면 에러
			return false;
		}
	}

	return true;
}

/**
 * VOD, BTV용 미리보기 파일 체크
 * @param checkBoxFieldName VOD/BTV용 미리보기 선택박스
 * @param vodPreFieldName VOD Web용 미리보기 file
 * @param vodScPreFieldName VOD SC 미리보기 file
 * @param vodPreValueFieldName VOD Web용 미리보기 hidden - 실제값
 * @param vodScPreValueFieldName VOD SC 미리보기 hidden - 실제값
 * @param btvPreFieldName BTV Web 미리보기 text
 * @param btvScPreFieldName BTV SC 미리보기 text
 * @return
 */
function checkAllPreviewFiles(btvYn, vodPreFieldName, vodScPreFieldName, vodPreValueFieldName, vodScPreValueFieldName, btvPreFieldName, btvScPreFieldName) {

	var result = true;

	// 가변 메타정의 시 ID값을 일정하게 설정하지 않아서 getElementById로 얻기가 까다로움. file(VOD)은 가능.
	var vodPreObj = document.getElementById(vodPreFieldName);//document.all(vodPreFieldName);
	var vodScPreObj = document.getElementById(vodScPreFieldName);//document.all(vodScPreFieldName);
	var vodPreValueObj = document.all(vodPreValueFieldName);//document.getElementById(vodPreValueFieldName);
	var vodScPreValueObj = document.all(vodScPreValueFieldName);//document.getElementById(vodScPreValueFieldName);
//	var btvPreObj = document.all(btvPreFieldName);//document.getElementById(btvPreFieldName);
//	var btvScPreObj = document.all(btvScPreFieldName);//document.getElementById(btvScPreFieldName);

//	alert("checkValue = " + checkValue);

	// VOD면 VOD 미리보기 체크
//	if(btvYn != "Y") {
	if(btvYn = "N") {
		result = checkPreviewFilesByObj(vodPreObj, vodScPreObj);
		if(!result) { // VOD/BTV별로 별도의 경고 메시지를 출력해야 하므로 여기서 경고창을 띄운다.
			openWarningMessageWindow('고화질SD/일반화질 미리보기 파일을 모두 등록해주세요.<br>파일을 모두 등록해야 미리보기가 가능합니다.');
		}
	}
	// BTV면 BTV 미리보기 체크
	else {
//		result = checkPreviewFilesByObj(btvPreObj, btvScPreObj);
//		if(!result) { // VOD/BTV별로 별도의 경고 메시지를 출력해야 하므로 여기서 경고창을 띄운다.
//			openWarningMessageWindow('BTV용 고화질SD/일반화질 미리보기 URL을 모두 등록해주세요.<br>모두 등록해야 미리보기가 가능합니다.');
//		}
	}

	return result;
}

/**
 * UI 로드 시 BTV여부에 따라 VOD/BTV 미리보기를 활성화/비활성화한다.
 * @param btvYn BTV 여부
 * @param vodPreFieldName VOD Web용 미리보기 file
 * @param vodScPreFieldName VOD SC 미리보기 file
 * @param vodPreValueFieldName VOD Web용 미리보기 hidden - 실제값
 * @param vodScPreValueFieldName VOD SC 미리보기 hidden - 실제값
 * @param btvPreFieldName BTV Web 미리보기 text
 * @param btvScPreFieldName BTV SC 미리보기 text
 * @return
 */
function setPreviewType(btvYn, vodPreFieldName, vodScPreFieldName, vodPreValueFieldName, vodScPreValueFieldName, btvPreFieldName, btvScPreFieldName) {

	// 가변 메타정의 시 ID값을 일정하게 설정하지 않아서 getElementById로 얻기가 까다로움. file(VOD)은 가능.
	var vodPreObj = document.getElementById(vodPreFieldName);//document.all(vodPreFieldName);
	var vodScPreObj = document.getElementById(vodScPreFieldName);//document.all(vodScPreFieldName);
	var vodPreValueObj = document.all(vodPreValueFieldName);//document.getElementById(vodPreValueFieldName);
	var vodScPreValueObj = document.all(vodScPreValueFieldName);//document.getElementById(vodScPreValueFieldName);
//	var btvPreObj = document.all(btvPreFieldName);//document.getElementById(btvPreFieldName);
//	var btvScPreObj = document.all(btvScPreFieldName);//document.getElementById(btvScPreFieldName);

	// VOD면
	if(btvYn == "N") {
		// BTV 미리보기를 read-only / disable로 변경
//		btvPreObj.readOnly = true;
//		btvScPreObj.readOnly = true;
//		btvPreObj.disabled = true;
//		btvScPreObj.disabled = true;

//		btvPreObj.style.backgroundColor="#ddd"; // 배경색 변경
//		btvScPreObj.style.backgroundColor="#ddd";
	}
	// BTV면
	else {
		// VOD 미리보기를 read-only / disable로 변경
		vodPreObj.disabled = true; // file은 readOnly 속성 없음
		vodScPreObj.disabled = true;
	}
}

/**
 * 판매상태 변경 시 해당 변경에 맞는 확인 메시지를 반환한다.
 * @param reqType 변경할 상태 타입
 * @param dpStatus 현재 판매상태 코드
 * @param forbidStatuses 판매금지 코드 목록(,구분)
 * @return
 */
function getDpStatusChangeMessage(reqType, dpStatus, forbidStatuses) {

	if(reqType == "1"){ // 판매중

		msg = "해당 상품을 판매개시 하시겠습니까?";

		// 기존 상태가 판매금지면
		var s = forbidStatuses.split(",");
		for(var i = 0; i < s.length; i++) {
			if (dpStatus == s[i]) {
				msg = "해당 상품을 해지요청 하시겠습니까?";
				break;
			}
		}
	}
	else if(reqType == "2"){ // 판매중지
		msg = "해당 상품을 판매중지 하시겠습니까?";
	}
	else if(reqType == "3"){ // 일시정시
		msg = "일시정시로 변경 하시겠습니까?";
	}
	else if(reqType == "4"){ // 판매금지
		msg = "해당 상품을 판매금지(다운로드 불가) 하시겠습니까?";
	}
	else if(reqType == "5"){ // 판매금지
		msg = "해당 상품을 판매금지(다운로드 허용) 하시겠습니까?";
	}

	return msg;
}

/**
 * 태그값의 유효성을 검사한다.
 * @param obj 태그를 입력받는 inpt obj
 * @param limitCnt 최대갯수
 * @param tagName 태그명(셀러, 키워드 등)
 * @return 유효하면 true, 아니면 false
 */
function checkTag(obj, limitCnt, tagName) {

	var value = obj.value;

	if (!value.blank()) {
		var arr = value.split(",");
		if (arr.length > limitCnt) {
			openWarningMessageWindow(tagName + ' TAG는 컴마(,)를 구분자로 ' + limitCnt + '단어까지 입력하실 수 있습니다.');
			obj.focus();
			return false;
		}

		if (value.indexOf(' ') >= 0) {
			openWarningMessageWindow(tagName + ' TAG는 공백을 포함할 수 없습니다.');
			obj.focus();
			return false;
		}
	}

	return true;
}
